public class Text2 {
    // 牛客 反转链表的部分区间
    public ListNode reverseBetween (ListNode head, int m, int n) {
        // write code here
        ListNode ret = new ListNode(-1);
        ret.next = head;

        ListNode pre = ret;
        ListNode cur = head;

        for (int i = 1; i < m; i++) {
            // 找到区间m~n的链表
            pre = cur;
            cur = cur.next;
        }

        for (int i = m; i < n; i++) {
            ListNode temp = cur.next;
            cur.next = temp.next;
            temp.next = pre.next;
            pre.next = temp;
        }

        return ret.next;
    }
}
